#include "Mensajero.h"
#include "Debug.h"

Mensaje Mensajero::recibir(){
	Mensaje msg;
	cola.leer(&msg, (master)?ID_SLAVE:ID_MASTER);
	msg.tipo = COMANDO_REMOTO;

	return msg;
}

bool Mensajero::conectarse(){
	std::dbg << "Creo archivo principal\n";
	creat(ARCHIVO_COLA, 0666);

	try{
		int resultado = cola.conectar((char*)ARCHIVO_COLA, 'a');
		std::dbg << "Me conecto\n";
		
		if(resultado == 1){
			master = true;
			std::dbg << "Soy MASTER\n";
		}
		else if (resultado == 2){
			std::dbg << "Soy SLAVE\n";
			master=0;
		}
	}
	catch (GenericException &e){
		throw;
	}


	Mensaje mensaje;
	if(master){
		std::dbg << "Leo el nombre del archivo secundario\n";
		cola.leer(&mensaje, 0);
		std::dbg << "El nombre es: " << mensaje.contenido << "\n";
		std::dbg << "Me desconecto de la cola principal\n";
		cola.desconectar();
		cola.conectar(mensaje.contenido, 'a');
		std::dbg << "Conectado a la cola secundaria\n";
	}
	else{
		std::dbg << "Creo archivo secundario\n";
		char nombre[] = "/tmp/FiNavalXXXXXX";
		mkstemp(nombre);
		std::dbg << "Envío el nombre del archivo scundario (" << nombre << ")\n";
		mensaje.setContenido(nombre);
		enviar(mensaje);
		std::dbg << "Me desconecto de la cola proncipal\n";
		cola.desconectar();
		cola.conectar(nombre, 'a');
		std::dbg << "Conectado a la cola secundaria\n";
	}
	return true;
}

void Mensajero::desconectarse(){
	Mensaje m;
	m.contenido[0] = COMANDO_DESCONECTAR;
	enviar(m);
	cola.desconectar();
}


